package javachongkao.面向对象下.覆盖;

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Scanner;

//7-8 jmu-Java-03面向对象基础-05-覆盖
//Java每个对象都继承自Object,都有equals、toString等方法。
//现在需要定义PersonOverride类并覆盖其toString与equals方法。
//
//1. 新建PersonOverride类
//a. 属性：String name、int age、boolean gender，所有的变量必须为私有(private)。
//
//b. 有参构造方法，参数为name, age, gender
//
//c. 无参构造方法，使用this(name, age,gender)调用有参构造方法。参数值分别为"default",1,true
//
//d.toString()方法返回格式为：name-age-gender
//
//e. equals方法需比较name、age、gender，这三者内容都相同，才返回true.
//
//2. main方法
//2.1 输入n1，使用无参构造方法创建n1个对象，放入数组persons1。
//2.2 输入n2，然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在，如果不存在，才将该对象放入数组persons2。
//2.3 输出persons1数组中的所有对象
//2.4 输出persons2数组中的所有对象
//2.5 输出persons2中实际包含的对象的数量
//2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造方法。
//
//提示：使用ArrayList代替数组大幅复简化代码，请尝试重构你的代码。
class PersonOverride {
    private String name;
    private int age;
    private boolean gender;

    // 无参构造方法
    public PersonOverride() {
        this("default", 1, true);
    }

    // 有参构造方法
    public PersonOverride(String name, int age, boolean gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 覆盖toString方法
    @Override
    public String toString() {
        return name + "-" + age + "-" + gender;
    }

    // 覆盖equals方法
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        PersonOverride that = (PersonOverride) obj;
        return age == that.age &&
                gender == that.gender &&
                name.equals(that.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 2.1 创建persons1数组
        int n1 = scanner.nextInt();
        ArrayList<PersonOverride> persons1 = new ArrayList<>();
        for (int i = 0; i < n1; i++) {
            persons1.add(new PersonOverride());
        }

        // 2.2 创建persons2数组
        int n2 = scanner.nextInt();
        ArrayList<PersonOverride> persons2 = new ArrayList<>();
        for (int i = 0; i < n2; i++) {
            String name = scanner.next();
            int age = scanner.nextInt();
            boolean gender = scanner.nextBoolean();
            PersonOverride person = new PersonOverride(name, age, gender);

            // 检查是否已存在
            if (!persons2.contains(person)) {
                persons2.add(person);
            }
        }

        // 2.3 输出persons1
        for (PersonOverride p : persons1) {
            System.out.println(p);
        }

        // 2.4 输出persons2
        for (PersonOverride p : persons2) {
            System.out.println(p);
        }

        // 2.5 输出persons2实际数量
        System.out.println(persons2.size());

        // 2.6 输出构造方法
        System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));

        scanner.close();
    }
}